﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using radnaVerzija.Interfejsi;
using MySql.Data.MySqlClient;

namespace radnaVerzija
{
    partial class DAL
    {
        public class OsobaDAO : IDaoCrud<Osoba>
        {
            protected MySqlCommand komanda;

            public long create(Osoba entitet)
            {
                try
                {
                    komanda = new MySqlCommand("insert into Osoba (ime, prezime, jmbg, datumRodjenja, adresa, brojTelefona) values (@ime, @prezime, @JMBG, str_to_date(@datumRodjenja, '%d.%m.%Y'), @adresaStanovanja, @brojTelefona);", konekcija);
                    komanda.Parameters.AddWithValue("@ime", entitet.Ime);
                    komanda.Parameters.AddWithValue("@prezime", entitet.Prezime);
                    komanda.Parameters.AddWithValue("@JMBG", entitet.JMBG1);
                    komanda.Parameters.AddWithValue("@datumRodjenja", entitet.DatumRodjenja.ToShortDateString());
                    komanda.Parameters.AddWithValue("@adresaStanovanja", entitet.AdresaStanovanja);
                    komanda.Parameters.AddWithValue("@brojTelefona", entitet.BrojTelefona);
                    komanda.ExecuteNonQuery();
                    return komanda.LastInsertedId;

                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            public Osoba read(Osoba entitet)
            {
                try
                {
                    komanda = new MySqlCommand("select * from Osoba where idOsoba = @id;", konekcija);
                    komanda.Parameters.AddWithValue("@id", entitet.IdOsobe);
                    MySqlDataReader citac = komanda.ExecuteReader();
                    Osoba osoba = null;
                    citac.Read();
                    if (false == citac.HasRows) { citac.Close(); return null; }
                    osoba = new Osoba(citac.GetString("ime"),
                                          citac.GetString("prezime"),
                                          citac.GetString("JMBG"),
                                          citac.GetDateTime("datumRodjenja"),
                                          citac.GetString("adresa"),
                                         // citac.GetString("zanimanje"),
                                          citac.GetString("brojTelefona"),
                                          entitet.IdOsobe);
                    citac.Close();
                    return osoba;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            public Osoba getByJMBG(string maticni)
            {
                try
                {
                    komanda = new MySqlCommand("select * from Osoba where jmbg = @jmbg;", konekcija);
                    komanda.Parameters.AddWithValue("@jmbg", maticni);
                    MySqlDataReader citac = komanda.ExecuteReader();
                    Osoba osoba = null;
                    citac.Read();
                    if (citac.HasRows == false) { citac.Close(); return null; }
                    osoba = new Osoba(citac.GetString("ime"),
                                          citac.GetString("prezime"),
                                          citac.GetString("JMBG"),
                                          citac.GetDateTime("datumRodjenja"),
                                          citac.GetString("adresa"),
                                          //citac.GetString("zanimanje"),
                                          citac.GetString("brojTelefona"),
                                          citac.GetInt32("idOsoba"));
                    citac.Close();
                    return osoba;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            public Osoba getByID(int id)
            {
                try
                {
                    komanda = new MySqlCommand("select * from Osoba where idOsoba = @id;", konekcija);
                    komanda.Parameters.AddWithValue("id", id);
                    MySqlDataReader citac = komanda.ExecuteReader();
                    Osoba osoba = null;
                    citac.Read();
                    if (citac.HasRows == false) { citac.Close(); return null; }
                    osoba = new Osoba(citac.GetString("ime"),
                                          citac.GetString("prezime"),
                                          citac.GetString("JMBG"),
                                          citac.GetDateTime("datumRodjenja"),
                                          citac.GetString("adresa"),
                                          //citac.GetString("zanimanje"),
                                          citac.GetString("brojTelefona"),
                                          citac.GetInt32("idOsoba"));
                    citac.Close();
                    return osoba;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            public Osoba update(Osoba entitet)
            {
                try
                {
                    komanda = new MySqlCommand("update Osoba set ime = @ime, prezime = @prezime, JMBG = @JMBG, datumRodjenja = str_to_date(@datumRodjenja, '%d.%m.%Y'), adresa = @adresaStanovanja, brojTelefona = @brojTelefona where idOsoba = @id;", konekcija);
                    komanda.Parameters.AddWithValue("@ime", entitet.Ime);
                    komanda.Parameters.AddWithValue("@prezime", entitet.Prezime);
                    komanda.Parameters.AddWithValue("@JMBG", entitet.JMBG1);
                    komanda.Parameters.AddWithValue("@datumRodjenja", entitet.DatumRodjenja.ToShortDateString());
                    komanda.Parameters.AddWithValue("@adresaStanovanja", entitet.AdresaStanovanja);
                    komanda.Parameters.AddWithValue("@brojTelefona", entitet.BrojTelefona);
                    //komanda.Parameters.AddWithValue("zanimanje", entitet.Zanimanje);
                    komanda.Parameters.AddWithValue("@id", entitet.IdOsobe);
                    komanda.ExecuteNonQuery();
                    return read(entitet);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            public void delete(Osoba entitet)
            {
                try
                {
                    komanda = new MySqlCommand("delete from Osoba where idOsobe = @id;", konekcija);
                    komanda.Parameters.AddWithValue("@id", entitet.IdOsobe);
                    komanda.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
    }
}
